In general, a finite state machine constitutes an event-driven system that makes a transition from one state to another provided that the condition defining the transition is determined to be true. More specifically, a “finite state machine” is a mechanism composed of states, transitions and actions. In general, a “state” is a point in the processing structure of a state machine. Each state defines a set of responses to inputs, and can be thought of as the culmination of past inputs, or the dividing line between past events and future events to be processed from that point forward. A “transition” indicates a state change and is described by a condition that would need to be fulfilled to enable the transition to occur. Each transition can also have one or more “effect” actions that are executed when a transition is being made from one state to another along a transition path. This allows specific processing to occur in response to events that cause a transition from one state to another. An “action” is a description of the processing to be performed as part of the processing of a state machine.
Traditional definitions of finite state machines such as used in Unified Modeling Language (UML) involve a strict interpretation of events from either a current state or a state hierarchy that is a situation where one state is subdivided into sub-states that can differentiate events within the enclosing state. For conventional UML-based, finite state machines, each state has a set of “entry” actions that are executed upon entering into a current state, “exit” actions that are executed upon exiting from the current state, and one or more “do activity” actions that are executed while in the current state.
One disadvantage associated with conventional finite state machines (FSMs) is that they operate on a linear sequence of events and transition from state to state as a result of those events being presented to the FSM. Conventional FSMs do not support out-of-order processing of input information.